/**
 * Copyright 2008 Mathias Doenitz, http://lis.to/
 *
 * This file is part of the lis.to java desktop client. The lis.to java desktop client is free software: you can
 * redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * The lis.to java desktop client is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with the lis.to java desktop client.
 * If not, see http://www.gnu.org/licenses/
 */

package listo.client.dialogs.controllers;

import com.google.inject.Inject;
import listo.utils.swing.AutoCompleter;
import listo.client.dialogs.PopupDialog;
import listo.client.dialogs.autocompletion.SnoozeTimeCompleter;
import org.apache.commons.lang.StringUtils;

import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;

public class PopupSnoozeTimeController extends TextComponentController<PopupDialog.Model> {

    private final SnoozeTimeCompleter completer;

    @Inject
    public PopupSnoozeTimeController(SnoozeTimeCompleter completer) {
        this.completer = completer;
    }

    public void setDialogComponent(JDialog dialog, JComponent component) {
        super.setDialogComponent(dialog, component);
        new AutoCompleter(completer).decorate(dialog, (JTextComponent) component);
    }

    protected void updateView(boolean active) {
        Integer snoozeTime = modelObject.snoozeTime;

        String text;
        if (snoozeTime != null) {
            text = snoozeTime == 1 ? "1 minute" : String.format("%s minutes", snoozeTime);
            textComponent.setForeground(SystemColor.textText);
        } else {
            text = active ? "" : "Please enter snooze time!";
            textComponent.setForeground(active ? SystemColor.textText : SystemColor.textInactiveText);
        }
        setText(text);
    }

    protected void extractFromString(String string) {
        if (textComponent.isEnabled() && StringUtils.isNotEmpty(string)) {
            String[] s = StringUtils.split(string);
            if (StringUtils.isNumeric(s[0])) {
                try {
                    int time = Integer.parseInt(s[0]);
                    if (time > 0) {
                        setSnoozeTime(time);
                        return;
                    }
                }
                catch (NumberFormatException e) {
                    // ignore
                }
            }
        }
        setSnoozeTime(null);
    }

    private void setSnoozeTime(Integer minutes) {
        modelObject.snoozeTime = minutes;
    }

    public boolean isComponentValid() {
        return !textComponent.isEnabled() || modelObject.snoozeTime != null;
    }

}